package it.storm.solution;

/**
 * 724. 寻找数组的中心索引
 * https://leetcode-cn.com/problems/find-pivot-index/
 */
public class Solutions_724 {
    public static void main(String[] args) {
//        int[] nums = {1, 7, 3, 6, 5, 6};  // output: 3
//        解释：索引 3 (nums{3} = 6) 的左侧数之和 (1 + 7 + 3 = 11)，与右侧数之和 (5 + 6 = 11) 相等。
//        同时, 3 也是第一个符合要求的中心索引。

//        int[] nums = {1, 2, 3};  // output: -1
//        解释：数组中不存在满足此条件的中心索引。

//        int[] nums = {0, 0, 0, 0};  // output: 0

//        int[] nums = {-1, -1, -1, -1, -1};  // output: 2

        int[] nums = {-1, -1, -1, -1, -1, -1};  // output: -1

        int result = pivotIndex(nums);
        System.out.println(result);
    }

    // 若 i 为中心索引，那么等式必然成立：sum([0, i - 1]) == sum([i + 1, len - 1])
    public static int pivotIndex(int[] nums) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        int preSum = 0;
        for (int i = 0; i < nums.length; i++) {
            if (preSum == sum - preSum - nums[i]) {
                return i;
            }
            preSum += nums[i];
        }
        return -1;
    }
}
